home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 11587 / 11587.xpi / chrome / aviary.jar / content / pearlutil-request.js < prev    next >
Text File  |  2009-07-08  |  3KB  |  81 lines

  1. /* Copyright (c) 2008-2009 Pearl Crescent, LLC.  All Rights Reserved. */
  2. /* vim: set sw=2 sts=2 ts=8 et syntax=javascript: */
  3.  
  4. /*
  5.  * This file is part of the Pearl Crescent Utility Functions Library.
  6.  *
  7.  * Notes for use in projects:
  8.  *  + This object is needed to address "regressions" in Firefox where
  9.  *      cookies are not always sent with XMLHttpRequests.  It offers
  10.  *      compatibility across Firefox 3.0, 3.5 and beyond.
  11.  */
  12.  
  13. if (!com) var com = {};
  14. if (!com.aviary) com.aviary = {};
  15. if (!com.aviary.talon) com.aviary.talon = {};
  16. if (!com.aviary.talon.request)
  17.   com.aviary.talon.request = {
  18.  
  19.   // aChannel should be an nsIChannel.
  20.   // aBackupWin is optional.  If present, it should be a brower window.  It
  21.   //   is used in Firefox 3.5 to obtain the loadGroup for retrieving cookies
  22.   //   if no other browser windows can be located.
  23.   EnsureCookiesWillBeSent: function(aChannel, aBackupWin)
  24.   {
  25.     if (!aChannel)
  26.       return;
  27.  
  28.     const kCC = Components.classes;
  29.     const kCI = Components.interfaces;
  30.  
  31.     if ((aChannel instanceof kCI.nsIHttpChannelInternal)
  32.         && ("forceAllowThirdPartyCookie" in aChannel))
  33.     {
  34.       aChannel.forceAllowThirdPartyCookie = true;
  35.     }
  36.     else
  37.     {
  38.       // Set loadGroup and loadFlags so that cookies are sent when
  39.       // pref for "Send 3rd Party Cookies" is not set.
  40.       // This is a work around for Mozilla bug # 437174.
  41.       try
  42.       {
  43.         var docShell;
  44.  
  45.         var appInfoSvc = kCC["@mozilla.org/xre/app-info;1"]
  46.                             .getService(kCI.nsIXULAppInfo);
  47.         var platformVer = appInfoSvc.platformVersion;
  48.         var verCmpSvc = kCC["@mozilla.org/xpcom/version-comparator;1"]
  49.                                .getService(kCI.nsIVersionComparator);
  50.         var haveGecko191 = (verCmpSvc.compare(platformVer, "1.9.1b1") >= 0);
  51.         if (haveGecko191) // FF >= 3.5
  52.         {
  53.           var wm = kCC["@mozilla.org/appshell/window-mediator;1"]
  54.                       .getService(kCI.nsIWindowMediator);
  55.           var browserWin = wm.getMostRecentWindow("navigator:browser");
  56.           if (!browserWin)
  57.             browserWin = aBackupWin;
  58.           docShell = browserWin.QueryInterface(kCI.nsIInterfaceRequestor)
  59.                                .getInterface(kCI.nsIWebNavigation)
  60.                                .QueryInterface(kCI.nsIInterfaceRequestor);
  61.         }
  62.         else // FF 3.0.x
  63.         {
  64.           docShell = kCC["@mozilla.org/webshell;1"]
  65.                              .createInstance(kCI.nsIDocShellTreeItem)
  66.                              .QueryInterface(kCI.nsIInterfaceRequestor);
  67.           docShell.itemType = kCI.nsIDocShellTreeItem.typeContent;
  68.         }
  69.  
  70.         if (docShell)
  71.           aChannel.loadGroup = docShell.getInterface(kCI.nsILoadGroup);
  72.       }
  73.       catch(e) { dump("EnsureCookie err: " + e + "\n"); }
  74.  
  75.       aChannel.loadFlags |= aChannel.LOAD_DOCUMENT_URI;
  76.     }
  77.   },
  78.  
  79.   endOfObject: true
  80. }
  81.